[PHP] ดึงอัตราแลกเปลี่ยนจาก API ธนาคารชาติ (2022) Turn Back
2019-02-25 15:48:24
จากที่ก่อนหน้านี้ (ปลายปี2018) ทางธนาคารแห่งประเทศไทย (ธปท)
ได้พัฒนา API Exchange Rate จากเวอร์ชั่นเก่า มาเป็นตัวใหม่
ส่งผลให้ Application ของเว็บไซ์ที่เคยเขียนไว้ ไม่สามารถเชื่อมต่อ API ตัวเดิมได้
ดังนั้นเราจะมาลองเชื่อมต่อ API เวอร์ชั่นใหม่นี้ (Exchange Rate 2.0.1)
1. เข้าเว็บไซต์ของ ธปท. https://www.bot.or.th/ แล้วไปที่ลิ้งค์หน้า BOT API (Click)
2. เลือกเมนู API Product และทำการ Subscribe API ที่ชื่อ Exchang Rate
** ต้อง Login เข้าระบบก่อน หากยังไม่ได้ Register ก็ให้สมัครใช้งานเป็น Developer ก่อนนะครับ
ถึงตรงนี้ถ้า งงๆ ก็ให้ไปใช้เมนู Getting started นะครับ จะมีขั้นตอนบอกไว้ค่อนข้างละเอียดเลย
3. หลังจาก Subscribe ในหน้าหลักของ Exchange Rate API
ที่เมนูย่อยด้านข้าง ผมเลือกเป็น Exchange rate THB/ US
เสร็จแล้วจะมี tab Coding guide ให้เราเลือก PHP
ให้ลอง copy ตัวอย่างโค้ดนั้นมาได้เลย โดยให้เปลี่ยน parameter ตามที่เราต้องการ
ตัวอย่าง Coding
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://apigw1.bot.or.th/bot/public/Stat-ReferenceRate/v2/DAILY_REF_RATE/?start_period=REPLACE_THIS_VALUE&end_period=REPLACE_THIS_VALUE",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"x-ibm-client-id: REPLACE_THIS_KEY"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
จากโค้ดด้านบน .ให้เราใส่ค่า start_period, end_period (ช่วงวันที่ อัตราแลกเปลี่ยน)
เราสามารถใช้ PHP Date ได้เลย เช่น วันปัจจุบัน date("Y-m-d")
และก็เปลี่ยนตรง client-id: เป็น key ที่ได้มาตอน subscribe
เมื่อใส่ค่าพารามิตเตอร์ครบแล้ว ก็ลองรันไฟล์นี้ดู จะได้ข้อมูลฟอร์แมท JSON ออกมา
5. ขั้นต่อไป เราต้องการข้อมูลเฉพาะ ตัวเลขค่าเงินบาท ก็ใช้คำสั่ง Decode JSON ก่อน
$obj = json_decode($response, true);
เมื่อได้ Object มาแล้ว เราก็ลองมาไล่ key array เพื่อดึง
เฉพาะค่าอัตราแลกเปลี่ยน และเป็นข้อมูลวันล่าสุด ออกมา
echo $obj['result']['data']['data_detail'][0]['rate'];
*** คุณสามารถ var_dump($obj) ข้อมูลออกมาดูก่อนก็ได้ ว่าจะเข้าถึงแต่ละ node อย่างไร